'''
Created on 23 fevr. 2011

@author: wp803469
'''

import math
import wave        #http://docs.python.org/library/wave.html
import struct
import audioop     #http://docs.python.org/library/audioop.html
import numpy as np

class Bruiteur(object):
    '''
    sert a creer du bruit
    permet de garder en memoire une fonction
    '''
    # pour la creation du signal
    frate = 11025.0  # framerate as a float
    amplitude = 8000.0     # multiplier for amplitude
    sig = []

    # entete WAV
    nchannels = 1            # Nombre de canaux => Mono
    sampwidth = 2            # Octets par echantillons : 16
    framerate = int(frate)   # Frequence echantillonnage
    nframes = 10000           # 1 Frame = ensemble des echantillons des canaux a un temps t 
    comptype = "NONE"            # Presence d'une Methode de compression 
    compname = "not compressed"  # Nom de cette methode
    
    # le fichier audio
    nomFichier = ""
    audioFile = []
    
    def __init__(self, amplitude=8000.0, frequence=440, taille=10000, nomFichier="toto.wav"):
        '''
        constructeur de Bruiteur
        '''
        self.frequence = frequence
        self.nframes = taille
        self.amplitude = amplitude
        self.nomFichier = nomFichier
        self.createAudio()
    
    def createAudio(self):
        '''
        cree le son
        '''
        self.sig = []
        wav_file = wave.open(self.nomFichier, "w")
        wav_file.setparams((self.nchannels, self.sampwidth, self.framerate, self.nframes, self.comptype, self.compname))
        for i in range(self.nframes):
            self.sig.append(math.sin(2*math.pi*self.frequence*(i/self.frate)))
        for s in self.sig:
            # write the audio frames, make sure nframes is correct
            wav_file.writeframes(struct.pack('<h', s*self.amplitude/1.5))
            # La fonction pack permet de generer une string.
            # Avec le format h, il s agit d'une succession d'octets 
            # tq  "16 bits signes" (h) en little endian "<"
            # http://docs.python.org/library/struct.html
        wav_file.close()
        self.audioFile = wav_file
        return self
    
    def getNomFichier(self):
        return self.nomFichier

        
        
        
        
        
        
        
        
        
        
        
        
        
        
        